package com.sunwayhorizo.health.business.base.query;

import java.util.List;
import java.util.Map;

import javax.ejb.Local;

import com.sunwayhorizo.health.hl7.common.Hl7Exception;
import com.sunwayhorizo.health.hl7.rim.Act;
import com.sunwayhorizo.health.hl7.rim.ActParticipation;
import com.sunwayhorizo.health.hl7.rim.Document;
import com.sunwayhorizo.health.hl7.rim.Hl7Entity;
import com.sunwayhorizo.health.hl7.rim.Role;
import com.sunwayhorizo.health.hl7.vocabulary.RoleIICode;

@Local
public interface BaseQueryLocal
{
    /**
     * 根据动作ID查询Document
     * 
     * @param docId
     * @return
     * @throws Hl7Exception
     */
    public Document findDocumentById(String docId) throws Hl7Exception;


    /**
     * 此方法不完善，判断需要考虑identityName，暂能满足功能 判断是否是唯一，不是唯一 false,是true
     * 
     * @param code
     *            需要验证的code值
     * @return boolean
     */
    public boolean findRimCoreEntyIiByCode(String code) throws Hl7Exception;


    /**
     * 此方法不完善，判断需要考虑identityName，暂能满足功能 判断是否是唯一，不是唯一 false,是true
     * 
     * @param code
     *            需要验证的code值
     * @return boolean
     */
    public boolean findRimCoreRoleIiByCode(String code) throws Hl7Exception;


    /**
     * 根据roleId查询role
     * 
     * @param roleId
     * @return Role
     * @throws Hl7Exception
     */
    public Role findRoleById(Long roleId) throws Hl7Exception;


    /**
     * 根据entityId查询Entity
     * 
     * @param entityId
     * @return Hl7Entity
     * @throws Hl7Exception
     */
    public Hl7Entity findHl7EntityById(Long entityId) throws Hl7Exception;


    /**
     * 根据ActId查询Act
     * 
     * @param actId
     * @return
     * @throws Hl7Exception
     */
    public Act findActByActId(Long actId) throws Hl7Exception;


    /**
     * 查询actII是否存在
     * 
     * @param actii
     *            actII 唯一code值
     * @param identifierName
     *            actII 唯一类型值
     * @return boolean
     * @throws Hl7Exception
     */
    public boolean actIIExist(String actii, String identifierName) throws Hl7Exception;


    /**
     * 根据动作id查询ActParticipation集合
     * 
     * @param ActId
     *            动作id
     * @return List<ActParticipation>
     * @throws Hl7Exception
     */
    public List<ActParticipation> findPrtcptnsByActId(Long ActId) throws Hl7Exception;


    /**
     * 根据条件map返回对象集合
     * 
     * @param conditions
     *            查询条件,key为属性名称，value为属性值
     * @param clazz
     *            查询对象Class
     * @return List<T>
     * @throws Hl7Exception
     */
    public <T> List<T> getObjects(Class<T> clazz, Map<String, Object> conditions) throws Hl7Exception;

    /**
     * 查询entityII是否存在
     * 
     * @param id
     *            entityII code值
     * @param codingschemeEnName
     *            唯一名称类型英文名
     * @param conceptCode
     *            唯一名称类型code值
     * @return boolean
     * @throws Hl7Exception
     */
    boolean validateEntityIIExsit(String id, String codingschemeEnName, String conceptCode)throws Hl7Exception;

    /**
     * 查询roelII是否存在
     * 
     * @param id
     *            roleII code值
     * @param codingschemeEnName
     *            唯一名称类型英文名
     * @param conceptCode
     *            唯一名称类型code值
     * @return boolean
     * @throws Hl7Exception
     */
    boolean validateRoleIIExsit(String id, String codingschemeEnName, String conceptCode);


    boolean validateRoleIIExsit(String id, RoleIICode identifiername);
    
    /**
     * 验证actii是否重复
     * @param actii ii值
     * @param identifierName
     * @param actId act主键
     * @return true：存在 false：不存在
     * @throws Hl7Exception
     */
    public boolean validateActIIExsit(String actii, String identifierName,String actId) throws Hl7Exception;
    
      /**
       * 验证entyii是否重复（包括添加，修改）
       * @param entyii ii值
       * @param identifierName
       * @param entityId enty主键id
       * @return true：存在  false：不存在
       * @throws Hl7Exception
       */
    public boolean validateEntyIIExsit(String entyii, String identifierName, String entityId) throws Hl7Exception;


    Role findRoleByII(String ii, String identifierName);


  
}
